//package com.xiongkw.utils;
//
//import com.alibaba.fastjson.JSON;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.commons.lang3.StringUtils;
//import org.apache.http.HttpEntity;
//import org.apache.http.HttpResponse;
//import org.apache.http.client.ClientProtocolException;
//import org.apache.http.client.CookieStore;
//import org.apache.http.client.ResponseHandler;
//import org.apache.http.client.config.RequestConfig;
//import org.apache.http.client.methods.HttpGet;
//import org.apache.http.client.methods.HttpPost;
//import org.apache.http.client.methods.RequestBuilder;
//import org.apache.http.entity.ContentType;
//import org.apache.http.entity.StringEntity;
//import org.apache.http.entity.mime.HttpMultipartMode;
//import org.apache.http.entity.mime.MultipartEntityBuilder;
//import org.apache.http.entity.mime.content.StringBody;
//import org.apache.http.impl.client.BasicCookieStore;
//import org.apache.http.impl.client.CloseableHttpClient;
//import org.apache.http.impl.client.HttpClients;
//import org.apache.http.impl.cookie.BasicClientCookie;
//import org.apache.http.message.BasicHeader;
//import org.apache.http.util.EntityUtils;
//
//import java.io.File;
//import java.io.FileInputStream;
//import java.io.IOException;
//import java.nio.charset.Charset;
//import java.util.HashMap;
//import java.util.Map;
//import java.util.Map.Entry;
//
//@Slf4j
//public class HttpClientUtils {
//
//	public static String service(String httpMethod,String url,Map params){
//		return HttpClientUtils.service(httpMethod, url, new HashMap<String,String>(), params);
//	}
//
//	public static String service(String httpMethod,String url,Map<String,String> headers,Map params){
//		return HttpClientUtils.service(httpMethod, url, headers, JSON.toJSONString(params));
//	}
//
//
//	public static String doPostForm(String url,Map<String,String> params){
//		CloseableHttpClient httpclient = HttpClients.createDefault();
//        try {
//            HttpPost httpPost = new HttpPost(url);
//            //httpPost.setHeader("Content-type", ContentType.MULTIPART_FORM_DATA.toString());
//            MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create().setMode(HttpMultipartMode.BROWSER_COMPATIBLE)
//                    .setCharset(Charset.forName("utf-8")); //编码;
//            for(Entry<String, String> entry: params.entrySet()){
//            	StringBody stringbody = new StringBody(entry.getValue(),ContentType.create(ContentType.TEXT_PLAIN.getMimeType(), Charset.forName("utf-8")));
//            	multipartEntityBuilder.addPart(entry.getKey(),stringbody);
//            }
//            //设置参数到请求对象中
//            httpPost.setEntity(multipartEntityBuilder.build());
//            // Create a custom response handler
//            ResponseHandler<String> responseHandler = new ResponseHandler<String>() {
//                @Override
//                public String handleResponse(final HttpResponse response) throws IOException {
//                    int status = response.getStatusLine().getStatusCode();
//                    if (status >= 200 && status < 300) {
//                        HttpEntity entity = response.getEntity();
//                        return entity != null ? decodeUnicode(EntityUtils.toString(entity, "utf-8")) : null;
//                    } else {
//                        throw new ClientProtocolException("url: "+ url +" response status:" + status +" ! ");
//                    }
//                }
//            };
//            String responseBody = httpclient.execute(httpPost, responseHandler);
//            return responseBody;
//        } catch (IOException e) {
//            log.error("doGet url :  " + url + " error!", e);
//            throw new RuntimeException(e);
//        } finally {
//            try {
//                httpclient.close();
//            } catch (IOException e) {
//                e.printStackTrace();
//            }
//        }
//	}
//
//
//	public static String service(String httpMethod,String url,Map<String,String> headers,String jsonParam){
//		RequestBuilder builder = RequestBuilder.create(httpMethod);
//		if(null != headers && !headers.isEmpty()){
//        	for(Entry<String,String> entry : headers.entrySet()){
//        		builder.setHeader(entry.getKey(),entry.getValue());
//        	}
//        }
//        if(null == headers || !headers.containsKey("Content-type")){
//        	builder.setHeader("Content-type", "application/json;utf-8");
//        }
//        if(!StringUtils.isEmpty(jsonParam)){
//        	builder.setEntity(new StringEntity(jsonParam,"utf-8"));
//        }
//        builder.setUri(url);
//        ResponseHandler<String> responseHandler = new ResponseHandler<String>() {
//            @Override
//            public String handleResponse(final HttpResponse response) throws IOException {
//                int status = response.getStatusLine().getStatusCode();
//                if (status >= 200 && status < 300) {
//                    HttpEntity entity = response.getEntity();
//                    return entity != null ? decodeUnicode(EntityUtils.toString(entity, "utf-8")) : null;
//                } else {
//                    throw new ClientProtocolException("url: "+ url +" response status:" + status +" ! ");
//                }
//            }
//        };
//        CloseableHttpClient httpclient = HttpClients.createDefault();
//        try{
//        	String responseBody = httpclient.execute(builder.build(), responseHandler);
//        	return responseBody;
//        }catch (IOException e) {
//            log.error(builder.getMethod()+" url :  " + url + " error!", e);
//            throw new RuntimeException(e);
//        } finally {
//            try {
//                httpclient.close();
//            } catch (IOException e) {
//               log.error("",e);
//            }
//        }
//	}
//
//	public static String doPost(String url,String jsonParams){
//		return doPost(url,new HashMap<String,String>(),jsonParams);
//	}
//
//	public static String doPost(String url,Map<String,String> params){
//		return doPost(url,new HashMap<String,String>(), JSON.toJSONString(params));
//	}
//
//	public static String doPost(String url,Map<String,String> headers,Map<String,String> params){
//		return doPost(url,headers, JSON.toJSONString(params));
//	}
//
//
//    public static String doPost(String url,Map<String,String> headers, String jsonParam) {
//        CloseableHttpClient httpclient = HttpClients.createDefault();
//        try {
//            HttpPost httpPost = new HttpPost(url);
//            if(null != headers && !headers.isEmpty()){
//            	for(Entry<String,String> entry : headers.entrySet()){
//            		httpPost.setHeader(entry.getKey(),entry.getValue());
//            	}
//            }
//            if(null == headers || !headers.containsKey("Content-type")){
//            	httpPost.setHeader("Content-type", "application/json;utf-8");
//            }
//            StringEntity entity = new StringEntity(jsonParam,"utf-8");
//            //ByteArrayEntity entity = new ByteArrayEntity(jsonParam.getBytes("utf-8"));
//            //设置参数到请求对象中
//            httpPost.setEntity(entity);
//            // Create a custom response handler
//            ResponseHandler<String> responseHandler = new ResponseHandler<String>() {
//                @Override
//                public String handleResponse(final HttpResponse response) throws IOException {
//                    int status = response.getStatusLine().getStatusCode();
//                    if (status >= 200 && status < 300) {
//                        HttpEntity entity = response.getEntity();
//                        return entity != null ? decodeUnicode(EntityUtils.toString(entity, "utf-8")) : null;
//                    } else {
//                        throw new ClientProtocolException("url: "+ url +" response status:" + status +" ! ");
//                    }
//                }
//            };
//            String responseBody = httpclient.execute(httpPost, responseHandler);
//            return responseBody;
//        } catch (IOException e) {
//            log.error("doGet url :  " + url + " error!", e);
//            throw new RuntimeException(e);
//        } finally {
//            try {
//                httpclient.close();
//            } catch (IOException e) {
//                e.printStackTrace();
//            }
//        }
//    }
//
//
//
//    public static String doGet(String url,String cookieId,String cookieValue){
//        CookieStore cookieStore = new BasicCookieStore();
//        BasicClientCookie cookie = new BasicClientCookie(cookieId, cookieValue);
//        cookie.setVersion(0);
//        cookie.setDomain(".xiaohongshu.com");
//        cookie.setPath("/");
//        cookieStore.addCookie(cookie);
//        CloseableHttpClient httpclient = HttpClients.custom()
//                .setDefaultCookieStore(cookieStore)//设置Cookie
//                .build();
//
//        RequestConfig requestConfig = RequestConfig.custom()
//                .setSocketTimeout(3335000)
//                .setConnectTimeout(3335000)
//                .setConnectionRequestTimeout(3335000)
//                .build();
//        try{
//
//	        HttpGet httpGet = new HttpGet(url);
//	        httpGet.addHeader(new BasicHeader("Cookie", cookieId+"="+cookieValue));
//	        httpGet.setConfig(requestConfig);
//	        ResponseHandler<String> responseHandler = new ResponseHandler<String>() {
//	            @Override
//	            public String handleResponse(final HttpResponse response) throws IOException {
//	                int status = response.getStatusLine().getStatusCode();
//	                if (status >= 200 && status < 300) {
//	                    HttpEntity entity = response.getEntity();
//	                    return entity != null ? decodeUnicode(EntityUtils.toString(entity, "utf-8")) : null;
//	                } else {
//	                	  throw new ClientProtocolException("url: "+ url +" response status:" + status +" ! ");
//	                }
//	            }
//	        };
//	        String responseBody = httpclient.execute(httpGet, responseHandler);
//	        return responseBody;
//	    } catch (IOException e) {
//	        log.error("doGet url :  " + url + " error!", e);
//	        throw new RuntimeException(e);
//	    } finally {
//	        try {
//	            httpclient.close();
//	        } catch (IOException e) {
//	            e.printStackTrace();
//	        }
//	    }
//    }
//
//
//
//    public static String doGet(String url) {
//        CloseableHttpClient httpclient = HttpClients.createDefault();
//        try {
//            HttpGet httpget = new HttpGet(url);
//            // Create a custom response handler
//            ResponseHandler<String> responseHandler = new ResponseHandler<String>() {
//                @Override
//                public String handleResponse(final HttpResponse response) throws IOException {
//                    int status = response.getStatusLine().getStatusCode();
//                    if (status >= 200 && status < 300) {
//                        HttpEntity entity = response.getEntity();
//                        return entity != null ? decodeUnicode(EntityUtils.toString(entity, "utf-8")) : null;
//                    } else {
//                    	  throw new ClientProtocolException("url: "+ url +" response status:" + status +" ! ");
//                    }
//                }
//            };
//            String responseBody = httpclient.execute(httpget, responseHandler);
//            return responseBody;
//        } catch (IOException e) {
//            log.error("doGet url :  " + url + " error!", e);
//            throw new RuntimeException(e);
//        } finally {
//            try {
//                httpclient.close();
//            } catch (IOException e) {
//                e.printStackTrace();
//            }
//        }
//    }
//
//
//
//    public static String decodeUnicode(String theString) {
//        char aChar;
//        int len = theString.length();
//        StringBuffer outBuffer = new StringBuffer(len);
//        for (int x = 0; x < len; ) {
//            aChar = theString.charAt(x++);
//            if (aChar == '\\') {
//                aChar = theString.charAt(x++);
//                if (aChar == 'u') {
//                    // Read the xxxx
//                    int value = 0;
//                    for (int i = 0; i < 4; i++) {
//                        aChar = theString.charAt(x++);
//                        switch (aChar) {
//                            case '0':
//                            case '1':
//                            case '2':
//                            case '3':
//                            case '4':
//                            case '5':
//                            case '6':
//                            case '7':
//                            case '8':
//                            case '9':
//                                value = (value << 4) + aChar - '0';
//                                break;
//                            case 'a':
//                            case 'b':
//                            case 'c':
//                            case 'd':
//                            case 'e':
//                            case 'f':
//                                value = (value << 4) + 10 + aChar - 'a';
//                                break;
//                            case 'A':
//                            case 'B':
//                            case 'C':
//                            case 'D':
//                            case 'E':
//                            case 'F':
//                                value = (value << 4) + 10 + aChar - 'A';
//                                break;
//                            default:
//                                throw new IllegalArgumentException(
//                                        "Malformed   \\uxxxx   encoding.");
//                        }
//
//                    }
//                    outBuffer.append((char) value);
//                } else {
//                    if (aChar == 't')
//                        aChar = '\t';
//                    else if (aChar == 'r')
//                        aChar = '\r';
//                    else if (aChar == 'n')
//                        aChar = '\n';
//                    else if (aChar == 'f')
//                        aChar = '\f';
//                    outBuffer.append(aChar);
//                }
//            } else
//                outBuffer.append(aChar);
//        }
//        return outBuffer.toString();
//    }
//
//
//
//    public static void main(String[] args){
//
//	    String url = "http://localhost:8082/kaer/upload/externalUpload";
//        CloseableHttpClient httpclient = HttpClients.createDefault();
//        try {
//            HttpPost httpPost = new HttpPost(url);
//            MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create().setMode(HttpMultipartMode.BROWSER_COMPATIBLE)
//                    .setCharset(Charset.forName("utf-8")).setContentType(ContentType.MULTIPART_FORM_DATA);
//
//            multipartEntityBuilder.addBinaryBody("file", new FileInputStream(new File("/Users/cqh/Documents/gateway.jpg")),ContentType.DEFAULT_BINARY,"myFIleName.jpg");
//            httpPost.setEntity(multipartEntityBuilder.build());
//            // Create a custom response handler
//            ResponseHandler<String> responseHandler = new ResponseHandler<String>() {
//                @Override
//                public String handleResponse(final HttpResponse response) throws IOException {
//                    int status = response.getStatusLine().getStatusCode();
//                    if (status >= 200 && status < 300) {
//                        HttpEntity entity = response.getEntity();
//                        return entity != null ? decodeUnicode(EntityUtils.toString(entity, "utf-8")) : null;
//                    } else {
//                        throw new ClientProtocolException("url: "+ url +" response status:" + status +" ! ");
//                    }
//                }
//            };
//            String responseBody = httpclient.execute(httpPost, responseHandler);
//            System.out.println(responseBody);
//        } catch (IOException e) {
//            log.error("doGet url :  " + url + " error!", e);
//            throw new RuntimeException(e);
//        } finally {
//            try {
//                httpclient.close();
//            } catch (IOException e) {
//                e.printStackTrace();
//            }
//        }
//    }
//}
